package com.camelot.boot.server;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import okhttp3.*;

import java.util.concurrent.TimeUnit;

import static com.baomidou.mybatisplus.generator.config.OutputFile.mapper;

public class OllamaResumeExtractor {
    private static final String OLLAMA_API_URL = "https://api.deepseek.com/chat/completions";
    private static final String MODEL_NAME = "deepseek-reasoner"; // 确保模型名称正确
    private static final String API_KEY = "sk-cc3f800cb24b4470871afd2923cdd571";
    private static final ObjectMapper mapper = new ObjectMapper();
    // 2. 调用 Ollama API
    public static String parseResumeWithOllama(String text) throws Exception {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .build();
        // 构造提示词（明确要求返回 JSON）
        String prompt = """
            请从以下简历提取信息，严格返回 JSON 格式：
            {
                "name": "姓名",
                "phone": "电话",
                "email": "邮箱",
                "education": ["学校 | 学历 | 时间"],
                "experience": ["公司 | 职位 | 时间"]
            }
            简历内容：
            """ + text;
        // 使用 Jackson 生成 JSON 请求体（自动处理转义）
        ObjectNode requestBody = mapper.createObjectNode();
        requestBody.put("model", MODEL_NAME);
        requestBody.put("prompt", prompt.replace("\n", "\\n")); // 关键修正：转义换行符
        requestBody.put("stream", false);
        requestBody.put("format", "json");
        requestBody.put("Authorization", "Bearer " + API_KEY);


        Request request = new Request.Builder()
                .url(OLLAMA_API_URL)
                .post(RequestBody.create(
                                mapper.writeValueAsString(requestBody),
                                MediaType.parse("application/json")
                        ))
                        .build();

        try (Response response = client.newCall(request).execute()) {
            if (!response.isSuccessful()) {
                throw new RuntimeException("请求失败: HTTP " + response.code() +
                        "\n响应体: " + response.body().string());
            }
            return response.body().string();
        }
    }
    // 3. 主程序
    public static void main(String[] args) {
        String pdfPath = "D:\\new1\\ruoyi-vue-pro\\boot-server\\src\\main\\resources\\resume.pdf";
String temp="基本信息\n" +
        "孟飞\n" +
        "男 | 30 岁 | 10 年经验 | 大专 | 18019961689 | 630945930@qq.com | 已婚已育 | 现居合肥\n" +
        "| 薪资：面议 | 意向岗位\n" +
        "目前在职，考虑合适新机会\n" +
        "教育背景\n" +
        "2010/09 - 2013/06 合肥三联学院 大专 - 网络系统管理\n" +
        "工作经历\n" +
        "2012/07 - 2012/12 合肥百脑汇 弱电(实习生)\n" +
        "工作内容：\n" +
        "负责网络布线和监控安装、电脑组装等\n" +
        "2013/04 - 2014/05 合肥阳光消化病医院【网络部】 前端开发人员\n" +
        "工作内容：\n" +
        "网站的规划、后端接口设计；\n" +
        "企业网站搭建\n" +
        "网站 seo 和浏览器兼容性优化\n" +
        "2014/10 - 2018/04 合肥识微数字科技有限公司 全栈，项目负责人\n" +
        "工作内容：\n" +
        "负责项目整体规划、功能设计、需求分析、程序架构和开发、人员安排；\n" +
        "项目更近、系统优化和技术攻关；\n" +
        "有接近 20 多个项目经验。\n" +
        "2018/05 - 至今 合肥育达信息技术有限公司 全栈，项目负责人\n" +
        "工作内容：\n" +
        "负责项目整体规划、功能设计、需求分析、程序架构和开发、人员安排；\n" +
        "项目更近、系统优化和技术攻关；\n" +
        "有多个成熟的产品使用中。\n" +
        "项目经历\n" +
        "2013/04 - 2014/05 合肥阳光消化病医院官网 web、php\n" +
        "项目介绍\n" +
        "医院官网\n" +
        "1、web 页面编写，织梦 cms 改动\n" +
        "2、js，jq 的编写，ie 兼容性调试\n" +
        "2014/10 - 2015/06 模仿“生活半径”的外卖系统 web，php\n" +
        "项目介绍\n" +
        "在阜阳的外卖系统\n" +
        "我的职责\n" +
        "b5e490604df989ab1nB_2ti5FlpZxZG4UPKcR-eing~~\n" +
        "1、基于 lbs，使用 thinkphp3.2 编写用户 pc 和移动端页面\n" +
        "2、mysql 优化\n" +
        "3、页面兼容性调试\n" +
        "4、测试、实施和优化\n" +
        "2015/05 - 2015/07 小说 App web，php\n" +
        "项目介绍\n" +
        "小说 App 开发\n" +
        "我的职责\n" +
        "1、基于 angularjs1 和 ionic 开发的混合 App\n" +
        "2、后端系统和采集\n" +
        "3、页面兼容性调试\n" +
        "4、测试、实施和优化\n" +
        "2015/11 - 2016/01 安徽动高高铁离线点餐系统 web\n" +
        "项目介绍\n" +
        "驻点开发安徽动高高铁离线点餐系统，功能：离线点餐和娱乐\n" +
        "我的职责\n" +
        "1、内部框架搭建 web 框架 App\n" +
        "2、机型兼容性调试优化和服务端接口对接\n" +
        "2016/06 - 2016/09 合肥科技馆网站系统 web，php\n" +
        "项目介绍\n" +
        "合肥科技馆官网和后台系统，编辑人员通过后台编写图文信息，上级预约和审核预约。通过公众号进行扫码验\n" +
        "证。\n" +
        "我的职责\n" +
        "1、需求分析、文档编写、实施文档\n" +
        "2、人员安排和系统开发测试\n" +
        "3、系统性能优化\n" +
        "2016/12 - 2017/06 中国科学技术大学先进技术研究院官\n" +
        "网\n" +
        "web，php\n" +
        "项目介绍\n" +
        "中国科学技术大学先进技术研究院官网开发工作\n" +
        "我的职责\n" +
        "1、和科大老师进行对接需求\n" +
        "2、页面编写和人员安排\n" +
        "3、页面优化\n" +
        "2016/10 - 2017/04 桩点时间 web\n" +
        "项目介绍\n" +
        "基于 lbs 微信公众号扫码充电，实现附近、地图选桩、扫码充电功能\n" +
        "我的职责\n" +
        "1、web 页面\n" +
        "3、系统性能优化\n" +
        "2016/12 - 2017/07 火花桌面端 nodejs\n" +
        "项目介绍\n" +
        "通过提供基于科学可视化内容的备课平台\n" +
        "我的职责\n" +
        "1、部分 web 页面编写、技术难点攻克\n" +
        "2、视频点播相关技术（ffmpeg）\n" +
        "3、系统性能优化\n" +
        "2017/06 - 2018/02 LawRobot php、Python、web\n" +
        "项目介绍\n" +
        "智能法务系统开发，提供在线智能交流和人工付费法律咨询\n" +
        "我的职责\n" +
        "1、需求分析、程序架构和开发、人员安排\n" +
        "2、App、数据库、api 接口设计和开发\n" +
        "5、系统优化和迭代\n" +
        "2017/12 - 2018/04 快递员小扁担 php、web\n" +
        "项目介绍\n" +
        "致力于提供多元化的最后一公里服务采用物联网 互联网数据等技术，提高快递投送效率\n" +
        "我的职责\n" +
        "1、需求分析、程序架构和开发、人员安排\n" +
        "2、数据库、api 接口设计和开发\n" +
        "3、大数据量短信发短信队列处理\n" +
        "4、web 模块架构和移动端接口对接\n" +
        "5、系统优化和迭代\n" +
        "2018/05 - 2018/08 考试接口开发 php\n" +
        "项目介绍\n" +
        "考试客户端接口开发\n" +
        "我的职责\n" +
        "1、需求分析、程序架构和开发、人员安排\n" +
        "2、数据库设计\n" +
        "3，使用 hyperf 框架开发 api 接口开发\n" +
        "4、并发测试和实施\n" +
        "5、系统优化和迭代";
        try {
            // 读取 PDF
//            String resumeText = PdfParser.extractText(pdfPath);
//            System.out.println("PDF 内容:\n" + resumeText);

            // 调用 Ollama
            String jsonResponse = parseResumeWithOllama(temp);
            System.out.println("Ollama 原始响应:\n" + jsonResponse);

            // 解析 JSON（注意 Ollama 返回的完整响应结构）
            ObjectMapper mapper = new ObjectMapper();
            JsonNode root = mapper.readTree(jsonResponse);
            String responseText = root.get("response").asText(); // 提取实际生成的文本

            System.out.println("解析结果:\n" + responseText);
        } catch (Exception e) {
            System.err.println("错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}